<?php
/**
 * Controller_Auth
 *
 * Класс Controller_Auth отвечает за обработку авторизации и связанного с ней
 *
 * @author Дмитрий Кузьма <kouzma.d@gmail.com>
 * @version 1.0
 */
class Controller_Auth extends Controller_Base {


	public function __construct(&$arrRequest) {
	  $this->hideLeft = true;

	  //хлебные крошки
    $this->setCrumbs(array(
      array('url' => W_ABSPATH, 'name' => 'Home page')
    ));

		parent::__construct($arrRequest);
		$this->showRightColumn = false;
		switch ($this->arrRequest[1]) {
			case 'sign_up':
				$this->getActionReg();
				break;
			case 'sign_in':
				$this->getActionLogin();
				break;
			case 'exit':
				$this->getActionExit();
				break;
			case 'recovery':
				$this->getActionRecovery();
				break;
      case 'approve':
				$this->getActionApprove(Service_Function::absolutelyEscapeString($this->arrRequest[2]), Service_Function::absolutelyEscapeString($this->arrRequest[3]));
				break;
      case 'kaptcha':
				self::getActionKaptcha();
			  break;
			default:
				$this->show404Error();
				break;
		}
	}

	/**
	 * Действие - "Капча"
	 *
	 */
	public static function getActionKaptcha() {
 	  $objSession = User_Session::instance();
	  $redirectFalse = true;
    $captcha = new Kcaptcha(135, 52);
  	$objSession->__set('keystring', $captcha->getKeyString());
  	$objSession->__set('keystring', $captcha->getKeyString());
	}




	/**
	 * Действие - "Регистрация Гида"
	 *
	 */
	public function getActionReg() {
		if (isset($_POST['User_User'])) {
			$objUser = new User_User($_POST['User_User']);
			if ($objUser->save()) {
				// Копируем предсохраненную аватарку
			  if (file_exists(ABSPATH . 'content/images/essence/user/tmp/s_' . $objUser->getField('pic_file')) && is_file(ABSPATH . 'content/images/essence/user/tmp/s_' . $objUser->getField('pic_file'))) {
  				rename(ABSPATH . 'content/images/essence/user/tmp/s_' . $objUser->getField('pic_file'), ABSPATH . 'content/images/essence/user/s_' . $objUser->getField('pic_file'));
  				rename(ABSPATH . 'content/images/essence/user/tmp/m_' . $objUser->getField('pic_file'), ABSPATH . 'content/images/essence/user/m_' . $objUser->getField('pic_file'));
  				rename(ABSPATH . 'content/images/essence/user/tmp/b_' . $objUser->getField('pic_file'), ABSPATH . 'content/images/essence/user/b_' . $objUser->getField('pic_file'));
				}
				// Оповещаем пользователя по электронной почте
				//User_Notification::newAccount($objUser->getField('e_mail'), $objUser->getField('login'), $objUser->getField('pass'), $objUser->getField('approve_code'), $objUser->tableFields['login']);
				//User_Session::moveTo(W_ABSPATH, 'Вы успешно зарегистрированы. Письмо было отправлено на Ваш адрес электронной почты для подтверждения.' , 1);
				User_Session::moveTo(W_ABSPATH, 'Вы успешно зарегистрированы. Для входа в систему введите ваши логин и пароль в форме справа.' , 1);
			}
		}
		else $objUser = new User_User();
		
		$this->addJs('masked_input.js');
		$this->addCss('auth.css');
		$this->addJs('ajaxfileupload.js');
		$this->addJsReady('initFormsDatepickers();');
		$this->addDatepickerMetas();
		$this->title = 'Регистрация.';
		$this->pageHead = 'Регистрация.';
		$this->addCrumb($this->title);
    $this->showHeader();
 			View_Auth::getRegFormTC($objUser);
		$this->showFooter();
	}

	/**
	 * Действие - "Вход"
	 *
	 */
	public function getActionLogin() {
		$objSession = User_Session::instance();
		if ($objSession->isLoggedIn()) User_Session::moveTo(W_ABSPATH);

	  if (isset($_POST['User_User'])) {
			$objUser = new User_User($_POST['User_User']);
			$objUser->id = $objSession->login($objUser->getField('login'), md5($objUser->getField('pass')), !$objUser->getField('no_save'));
			if (!$objSession->isLoggedIn()) {
				Exception_ActiveRecord::addObjectException('User_User', 'all', 'логин и/или пароль не верны, или, может быть, вы не подтвердили ваш адрес электронной почты');
			}
      else
    	  User_Session::moveTo(W_ABSPATH);
		}
		else $objUser = new User_User();

		$this->title = 'Sign in';
		$this->pageHead = '';
		$this->addCss('auth.css');
		$this->addCrumb($this->title);

		$this->showHeader();
      $this->showH1('Sign in');
      View_Auth::getLoginForm($objUser);
		$this->showFooter();
	}

	/**
	 * Действие - "Выход"
	 *
	 */
	public function getActionExit() {
		$objSession = User_Session::instance();
		$objSession->logOut();
		if (!empty($_SERVER['HTTP_REFERER'])) {
		  User_Session::moveTo($_SERVER['HTTP_REFERER']);
		}
    else
    	User_Session::moveTo(W_ABSPATH);
	}

	/**
	 * Действие - "Подтверждение регистрации"
	 *
	 * @param $approveCode - код подтверждения регистрации
	 * @param $eMail - e-mail для подтверждения
	 */
	public function getActionApprove($approveCode, $eMail) {
		$objDb = Service_Database::instance();
		if (sizeof($approveCode) && sizeof($eMail)) {
    	$cntRows = $objDb->update('user', array('approved' => 1, 'approve_code' => ''), array('e_mail' => $eMail, 'approve_code' => $approveCode));
    	$objSession = User_Session::instance();
    	if (!$cntRows) $objSession->moveTo(W_ABSPATH, 'Неправильные данные. Ошибка при регистрации.', -1);
		}
		else $objSession->moveTo(W_ABSPATH, 'Неправильные данные. Ошибка при регистрации.', -1);
		$objSession->moveTo(W_ABSPATH, 'Вы успешно прошли регистрацию на нашем сайте!', 1);
  }

	/**
	 * Действие - "Восстановление пароля"
	 *
	 */
	public function getActionRecovery() {
		if (isset($_POST['User_User'])) {
			$objUser = new User_User($_POST['User_User']);
			if (!empty($objUser->tableFields['e_mail'])) {
				if ($objUser->recoveryPass($objUser->getField('e_mail')) !== false)
				  User_Session::moveTo(W_ABSPATH, 'пароль был отправлен на ваш адрес электронной почты', 1);
			}
			else $objUser->errorValidated('e_mail', $this->tableFields, 'E-Mail не заполнено');

		}
		else $objUser = new User_User();
		$this->addCss('auth.css');
		$this->title = 'Восстановление пароля';
		$this->pageHead = $this->title;
		$this->addCrumb($this->title);

    $this->showHeader();
  		View_Auth::getRecoveryForm($objUser);
		$this->showFooter();
	}

}
?>